import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.List;


/**
 * Write a description of class MiMundo here.
 * La clase escenario donde se efectuara todo el juego.
 * 
 * @author (Jose Santos Fraga Cordova) 
 * @version (1.0v)
 */

public class MiMundo extends World
{
    private Vidas vid=new Vidas(); //se crea el objeto de vidas para el juego
    int vidas=3; //numero de vidas iniciales
    public int nivel=1; //bandera que permite cambiar de nivel
    
    /**
     Se inicializa el numero de animales que hacen falta para pasar el sisugiente nivel
     */
    int pig=4;
    int sheep=3;
    int wombat=2;
     
    
    public MiMundo()
    {   
        super(950, 630, 1); //se manda llamar el padre, para crear el escenario(anchura, altura, pixel)
        
        Menu();// se madna llamar el metodo de menu
    }

    
    public void Menu()
    {
        removeObjects(getObjects(null));
        setBackground("portada.png"); //se establece el fondo de la portada
        
        addObject(new Play(),800,310); //boton play
        addObject(new Credits(),660,510); //boton creditos
        addObject(new Help(),185,410); //boton ayuda
    }
    
    
    /**
     * metodo donde se manda a llamar el nivel_1 aqui empieza la trama del juego
     */
    public void Play()
     {
        getObjects(Cerdo.class);
        getObjects(Borrego.class);
        getObjects(Oso.class);
        
        removeObjects(getObjects(null));
        Greenfoot.playSound("theme.mp3");
        
        nivel_1();
    }
    
    
    /**
     * metodo donde se establece la pantalla de ayuda 
     */
     public void Help()
    {
        removeObjects(getObjects(null));
        setBackground("ayuda.png");
        
        addObject(new Menu(),900,600);
    }
    
    
    /**
     * metodo donde se establece la pantalla de creditos
     */
     public void Credits()
    {
        removeObjects(getObjects(null));
        setBackground("creditos.png");
        
        addObject(new Menu(),850,600);
    }
    
    
    /**
     * metodo el cual se construye el nuvel 1 se colocan todos los elementos correspondientes en su posicion inicial
     */
    public void nivel_1()
    { 
        removeObjects(getObjects(null));
        setBackground("portadanivel1.png");
        
        Greenfoot.delay(100);
        setBackground("mundo.jpeg");
        
        Vidas(); //metodo para saber las vidas del jugador
        Pig(); //metodo para saber cuantos animales faltan para pasar el siguiente nivel
        
        addObject(new Usuario(), 100, 450);
        addObject(new Casa(), 50, 550);
        addObject(new Farol(),900, 550);
        addObject(new Ovni(), 350,200);
        addObject(new Cerdo(), 50, 550);
    }
    
    
    /**
     * metodo el cual se construye el nuvel 2 se colocan todos los elementos correspondientes en su posicion inicial
     */
    public void nivel_2()
    {
        removeObjects(getObjects(null));
        setBackground("portadanivel2.png");
        
        Greenfoot.delay(100);
        setBackground("mundo.jpeg");
        
        Vidas(); //metodo vidas jugador
        Sheep(); //metodo para saber cuantos animales faltan para pasar al siguiente nivel
        
        addObject(new Usuario(), 100, 450);
        addObject(new Casa(), 50, 550);
        addObject(new Farol(),900, 550);
        addObject(new Ovni(), 350, 200);
        addObject(new Ovni(), 500, 200);
        addObject(new Borrego(), 50, 550);
    }
    
    
    /**
     * metodo el cual se construye el nuvel 3 se colocan todos los elementos correspondientes en su posicion inicial
     */
    public void nivel_3()
    {
        removeObjects(getObjects(null));
        setBackground("portadanivel3.png");
        
        Greenfoot.delay(100);
        setBackground("mundo.jpeg");
        
        Vidas(); //metodo vidas jugador
        Wombat(); //metodo para saber cuantos animales faltan para ganar el juego
        
        addObject(new Usuario(), 100, 450);
        addObject(new Casa(), 50, 550);
        addObject(new Farol(), 900, 550);
        addObject(new Ovni(), 250, 200);
        addObject(new Ovni(), 350, 200);
        addObject(new Ovni(), 700, 200);
        addObject(new Oso(), 50, 550);
    }
    
    
    /**
     * metodo el cual se pone en pantalla el fondo ganar
     */
    public void win()
    {
        setBackground("win.png");
    }
    
    
    /**
     * metodo el cual checa la variable inicial de vidas y dependiendo cuantas vidas tenga el ususiario se ponen los corazones correspondientes
     * en el escenario
     */
    public void Vidas ()
    {
       removeObjects(getObjects(Vidas.class));
        
       switch(vidas)
       {   
           case 3: addObject(new Vidas(), 50, 50);
                   addObject(new Vidas(), 110, 50);
                   addObject(new Vidas(), 170, 50);
                break;
           case 2: addObject(new Vidas(), 50, 50);
                   addObject(new Vidas(), 110, 50);
                break;
           case 1: addObject(new Vidas(), 50, 50);
                break;
           default: //addObject(new Play(),920 ,250);
                    setBackground("lose.png"); //al momento de perder todas las vidas se pone el fondo de perder en el juego
                break;
       } 
    }
    
    
    /**
     * metodo el cual resta la varibale vida al momento de chocar con las balas
     */
    public void QuitaVida()
    {
        vidas--;
        Vidas();
    }
    
    
    /**
     * de aqui en adelante estos metodos son para saber cuantos animales de cada tipo faltan para poder pasar el siguiente nivel
     * tiene un metodo consiguiente para hacer el decremento de la variable inicial de animales que hacen falta para pasar el nivel
     */
    
    public void Pig ()
    {
       removeObjects(getObjects(Pig.class));
        
       switch(pig)
       {
           case 5: addObject(new Pig(), 900, 50);
                   addObject(new Pig(), 840, 50);
                   addObject(new Pig(), 780, 50);
                   addObject(new Pig(), 720, 50);
                   addObject(new Pig(), 660, 50);
                break;
           case 4: addObject(new Pig(), 900, 50);
                   addObject(new Pig(), 840, 50);
                   addObject(new Pig(), 780, 50);
                   addObject(new Pig(), 720, 50);
                break;
           case 3: addObject(new Pig(), 900, 50);
                   addObject(new Pig(), 840, 50);
                   addObject(new Pig(), 780, 50);
                break;
           case 2: addObject(new Pig(), 900, 50);
                   addObject(new Pig(), 840, 50);
                break;
           case 1: addObject(new Pig(), 900, 50);
                break;
       } 
    }
    
    public void QuitaPig()
    {
        pig--;
        Pig();
    }
    
    public void Sheep ()
    {
       removeObjects(getObjects(Sheep.class));
        
       switch(sheep)
       {   
           case 4: addObject(new Sheep(), 900, 50);
                   addObject(new Sheep(), 840, 50);
                   addObject(new Sheep(), 780, 50);
                   addObject(new Sheep(), 720, 50);
                break;
           case 3: addObject(new Sheep(), 900, 50);
                   addObject(new Sheep(), 840, 50);
                   addObject(new Sheep(), 780, 50);
                break;
           case 2: addObject(new Sheep(), 900, 50);
                   addObject(new Sheep(), 840, 50);
                break;
           case 1: addObject(new Sheep(), 900, 50);
                break;
       } 
    }
    
    public void QuitaSheep()
    {
        sheep--;
        Sheep();
    }
    
    public void Wombat ()
    {
       removeObjects(getObjects(Wombat.class));
        
       switch(wombat)
       {   
           case 2: addObject(new Wombat(), 900, 50);
                   addObject(new Wombat(), 840, 50);
                break;
           case 1: addObject(new Wombat(), 900, 50);
                break;
       } 
    }
    
    public void QuitaWombat()
    {
        wombat--;
        Wombat();
    }
}
    